package com.glsc.ngateway.common.base.converter.platform;

import cn.hutool.core.collection.CollectionUtil;
import com.alibaba.excel.util.CollectionUtils;
import com.glsc.ngateway.common.base.domain.mysql.gateway.platform.flow.FlowConfig;
import com.glsc.ngateway.common.base.domainmapper.FlowConfigMapper;
import com.glsc.ngateway.common.api.flowable.dto.task.config.FlowConfigDto;
import org.apache.commons.lang.StringUtils;
import org.apache.logging.log4j.util.Strings;

import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;

/**
 * @author xuchang
 */
public class FlowConfigConverter {

    public static FlowConfigDto do2Dto(FlowConfig config) {
        if (Objects.isNull(config)) {
            return null;
        }
        FlowConfigDto flowConfigDto = FlowConfigMapper.INSTANCE.do2Dto(config);
        flowConfigDto.setValue(StringUtils.isNotEmpty(config.getValue()) ? List.of(config.getValue().split(",")) : new ArrayList<>(0));
        return flowConfigDto;
    }

    public static List<FlowConfigDto> do2Dto(List<FlowConfig> configList) {
        return CollectionUtils.isEmpty(configList) ? java.util.Collections.emptyList() : configList.stream().map(FlowConfigConverter::do2Dto).collect(Collectors.toList());
    }

    public static FlowConfig dto2Do(FlowConfigDto configDto) {
        if (Objects.isNull(configDto)) {
            return null;
        }
        FlowConfig flowConfig = FlowConfigMapper.INSTANCE.dto2Do(configDto);
        flowConfig.setValue(CollectionUtil.isNotEmpty(configDto.getValue()) ? String.join(",", configDto.getValue()) : Strings.EMPTY);
        return flowConfig;
    }

    public static List<FlowConfig> dto2Do(List<FlowConfigDto> configDtoList) {
        return CollectionUtils.isEmpty(configDtoList) ? java.util.Collections.emptyList() : configDtoList.stream().map(FlowConfigConverter::dto2Do).collect(Collectors.toList());
    }

}
